Classloader使用及详解

您所在的位置:网站首页 java class文件加密 Classloader使用及详解

Classloader使用及详解

2023-09-09 12:28| 来源: 网络整理| 查看: 265

自定义解密加密类加载器

接替上一篇文章的自定义类加载器,添加了解密加密的功能,实现解密加密的类加载器,这样以后源码可以通过加密后传输 加密解密

package com.ln.concurrent.classloader.chapter4; /** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.classloader.chapter4 * @Name:SimpleEncrypt * @Author:linianest * @CreateTime:2021/1/6 14:39 * @version:1.0 * @Description TODO: 通过亦或的方式加密解密 */ public class SimpleEncrypt { // 明文 public static final String plain = "hello classLoader"; // 秘钥 public static final byte ENCRYPT_FACTOR = (byte) 0xff; //亦或的方式加密解密 public static void main(String[] args) { // 加密 final byte[] bytes = plain.getBytes(); final byte[] encrypt = new byte[bytes.length]; for (int i = 0; i dencrypt[i] = (byte) (encrypt[i] ^ ENCRYPT_FACTOR); } System.out.println(new String(dencrypt)); } }

自定义解密加密累加载器

package com.ln.concurrent.classloader.chapter4; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.classloader.chapter4 * @Name:EncryptUtils * @Author:linianest * @CreateTime:2021/1/6 14:47 * @version:1.0 * @Description TODO: 加密的工具类 */ public abstract class EncryptUtils { // 秘钥 private static final byte ENCRYPT_FACTOR = (byte) 0xff; private EncryptUtils() { } // 加密 public static void doEncrypt(String source, String target) { try (final FileInputStream fileInputStream = new FileInputStream(source); final FileOutputStream fileOutputStream = new FileOutputStream(target)) { int data; while ((data = fileInputStream.read()) != -1) { fileOutputStream.write(data ^ ENCRYPT_FACTOR); } fileOutputStream.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

解密

package com.ln.concurrent.classloader.chapter4; import java.io.*; /** * @ProjectName: java-concurrency * @Package: com.ln.concurrent.classloader.chapter4 * @Name:DecryptClassLoader * @Author:linianest * @CreateTime:2021/1/6 15:06 * @version:1.0 * @Description TODO: 解密类加载器 */ public class DecryptClassLoader extends ClassLoader { // 秘钥 private static final byte ENCRYPT_FACTOR = (byte) 0xff; private static final String DEFULT_DIR = "E:\\"; private String dir = DEFULT_DIR; public DecryptClassLoader() { super(); } public DecryptClassLoader(ClassLoader parent) { super(parent); } @Override protected Class findClass(String name) throws ClassNotFoundException { final String classpath = name.replace(".", "/"); final File classfile = new File(dir, classpath + ".class"); if (!classfile.exists()) { throw new ClassNotFoundException("The class " + name + " not found under directory [" + dir + "]"); } byte[] classBytes = loadClassBytes(classfile); if (null == classBytes || classBytes.length == 0) { throw new ClassNotFoundException("load the class " + name + " failed"); } return this.defineClass(name, classBytes, 0, classBytes.length); } public void setDir(String dir) { this.dir = dir; } /** * 将文件读取到内存字节数组并加密后,输出流中 * @param classfile * @return */ private byte[] loadClassBytes(File classfile) { try(final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final FileInputStream fileInputStream = new FileInputStream(classfile);){ int data; while ((data = fileInputStream.read()) != -1) { byteArrayOutputStream.write(data ^ ENCRYPT_FACTOR); } byteArrayOutputStream.flush(); return byteArrayOutputStream.toByteArray(); } catch (IOException e) { e.printStackTrace(); return null; } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3